/**
 * 统一响应格式工具
 */

class ApiResponse {
  /**
   * 成功响应
   */
  static success(res, data = null, message = '操作成功', code = 200) {
    return res.status(code).json({
      code,
      msg: message,
      data,
      timestamp: Date.now()
    });
  }

  /**
   * 失败响应
   */
  static error(res, message = '操作失败', code = 500, data = null) {
    return res.status(code).json({
      code,
      msg: message,
      data,
      timestamp: Date.now()
    });
  }

  /**
   * 分页响应
   */
  static paginate(res, data = {}) {
    return res.status(200).json({
      code: 200,
      msg: '获取成功',
      data: {
        list: data.list || [],
        total: data.total || 0,
        page: data.page || 1,
        pageSize: data.pageSize || 20,
        totalPages: Math.ceil((data.total || 0) / (data.pageSize || 20))
      },
      timestamp: Date.now()
    });
  }

  /**
   * 创建成功响应
   */
  static created(res, data = null, message = '创建成功') {
    return this.success(res, data, message, 201);
  }

  /**
   * 无内容响应
   */
  static noContent(res) {
    return res.status(204).send();
  }

  /**
   * 400 错误请求
   */
  static badRequest(res, message = '请求参数错误') {
    return this.error(res, message, 400);
  }

  /**
   * 401 未授权
   */
  static unauthorized(res, message = '未授权访问') {
    return this.error(res, message, 401);
  }

  /**
   * 403 禁止访问
   */
  static forbidden(res, message = '禁止访问') {
    return this.error(res, message, 403);
  }

  /**
   * 404 未找到
   */
  static notFound(res, message = '资源不存在') {
    return this.error(res, message, 404);
  }

  /**
   * 409 冲突
   */
  static conflict(res, message = '资源冲突') {
    return this.error(res, message, 409);
  }

  /**
   * 422 验证失败
   */
  static validationFailed(res, errors = {}, message = '数据验证失败') {
    return res.status(422).json({
      code: 422,
      msg: message,
      errors,
      timestamp: Date.now()
    });
  }

  /**
   * 429 请求过多
   */
  static tooManyRequests(res, message = '请求过于频繁') {
    return this.error(res, message, 429);
  }

  /**
   * 500 服务器错误
   */
  static serverError(res, message = '服务器内部错误') {
    return this.error(res, message, 500);
  }
}

module.exports = ApiResponse;

